package org.auth.bean;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.auth.domain.model.UserBase;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

public class CustomUserDetails implements UserDetails {

	/**
	 * 用户对象
	 */
	private UserBase user;
	
	/**
	 * 权限信息
	 */
	private final Set<GrantedAuthority> authorities;

	/**
	 * 构造函数
	 * 
	 * @param user 用户对象
	 */
	public CustomUserDetails(UserBase user) {
		super();
		this.user = user;
		this.authorities = new HashSet<GrantedAuthority>();
	}
	
	/**
	 * 构造函数
	 * 
	 * @param user 用户对象
	 * @param authorities 权限信息
	 */
	public CustomUserDetails(UserBase user, Set<GrantedAuthority> authorities) {
		super();
		this.user = user;
		this.authorities = authorities;
	}
	
	/**
	 * 取得权限信息
	 * 
	 * @return 权限信息
	 */
	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		return authorities;
	}

	/**
	 * 取得密码
	 * 
	 * @return 密码
	 */
	@Override
	public String getPassword() {
		return user.getPassword();
	}

	/**
	 * 取得用户名
	 * 
	 * @return 用户名
	 */
	@Override
	public String getUsername() {
		return user.getUserId().toString();
	}

	/**
	 * 判断用户对象是否过期（本系统未使用）
	 * 
	 * @return 检查结果
	 */
	@Override
	public boolean isAccountNonExpired() {
		return true;
	}

	/**
	 * 判断用户对象是否锁定（本系统未使用）
	 * 
	 * @return 检查结果
	 */
	@Override
	public boolean isAccountNonLocked() {
		return true;
	}

	/**
	 * 判断用户对象是否证书过期（本系统未使用）
	 * 
	 * @return 检查结果
	 */
	@Override
	public boolean isCredentialsNonExpired() {
		return true;
	}

	/**
	 * 判断用户对象是否关闭（本系统未使用）
	 * 
	 * @return 检查结果
	 */
	@Override
	public boolean isEnabled() {
		return true;
	}

	/**
	 * 取得用户对象
	 * 
	 * @return 用户对象
	 */
	public UserBase getUser() {
		return user;
	}

	/**
	 * 设置用户对象
	 * 
	 * @param user 用户对象
	 */
	public void setUser(UserBase user) {
		this.user = user;
	}
}
